import numpy as np
import pandas as pd
from plotly import express as px, io as pio
pd.options.plotting.backend = 'plotly'
pio.renderers.default = 'plotly_mimetype+notebook_connected'Análise dos Dados
TODO: Separar o que foi feito no dataset bruto do depois das mudanças
Análises de dados e investigações no Dataset bruto
Descrição de como foi feita a análise(perguntas que foram feitas para a base, possíveis pontos de limpeza, versões do python e bibliotecas)
essa é a parte que viemos fazendo até agora, identificando o que nos será útil da base que escolhemos
output_file = '../data/cursos.csv.zip'
df = pd.read_csv(output_file, dtype={'cod_municipio': int})
df| ano | regiao | uf | cod_municipio | nome_municipio | capital | latitude | longitude | cod_area | area | curso | rede_publica | presencial | bacharel | ingressantes | ingressantes_fem | concluintes | concluintes_fem | frac_ingressantes | frac_concluintes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2010 | Norte | RO | 1100049 | Cacoal | False | -11.4343 | -61.4562 | 51 | Ciências biológicas e correlatas | Biologia | False | True | True | 21 | 13 | 6 | 4 | 0.619048 | 0.666667 |
| 1 | 2010 | Norte | RO | 1100049 | Cacoal | False | -11.4343 | -61.4562 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | True | False | 61 | 26 | 27 | 12 | 0.426230 | 0.444444 |
| 2 | 2010 | Norte | RO | 1100049 | Cacoal | False | -11.4343 | -61.4562 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 88 | 48 | 10 | 5 | 0.545455 | 0.500000 |
| 3 | 2010 | Norte | RO | 1100064 | Colorado do Oeste | False | -13.1174 | -60.5454 | 71 | Engenharia e profissões correlatas | Gestão ambiental | True | True | False | 59 | 33 | 23 | 11 | 0.559322 | 0.478261 |
| 4 | 2010 | Norte | RO | 1100122 | Ji-Paraná | False | -10.8777 | -61.9322 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 109 | 52 | 32 | 15 | 0.477064 | 0.468750 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 17974 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 25 | 13 | 6 | 3 | 0.520000 | 0.500000 |
| 17975 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 17 | 7 | 9 | 3 | 0.411765 | 0.333333 |
| 17976 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 24 | 8 | 3 | 2 | 0.333333 | 0.666667 |
| 17977 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 48 | 14 | 20 | 2 | 0.291667 | 0.100000 |
| 17978 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 54 | Matemática e estatística | Estatística | True | True | True | 88 | 23 | 23 | 6 | 0.261364 | 0.260870 |
17979 rows × 20 columns
Histograma
Ingressantes
px.histogram(df, x='frac_ingressantes', color='cod_area', barmode='stack')Concluintes
px.histogram(df, x='frac_concluintes', color='cod_area', barmode='stack')Agrupado por features
def get_grouped(df: pd.DataFrame, by_col=None):
by_cols = ['ano'] if by_col == None else ['ano', by_col]
use_cols = by_cols + ['ingressantes', 'concluintes', 'ingressantes_fem', 'concluintes_fem']
dfg = df[use_cols].groupby(by=by_cols, as_index=False).sum()
dfg = dfg.melt(
id_vars = use_cols[:-4],
value_vars = use_cols[-4:],)
return dfgdef calc_round_ceil(df, value='value', div=1000):
return np.ceil(df[value].max() / div) * divTotal
dfg = get_grouped(df)
dfg| ano | variable | value | |
|---|---|---|---|
| 0 | 2010 | ingressantes | 118827 |
| 1 | 2011 | ingressantes | 135779 |
| 2 | 2012 | ingressantes | 162190 |
| 3 | 2013 | ingressantes | 172348 |
| 4 | 2014 | ingressantes | 182698 |
| 5 | 2015 | ingressantes | 172402 |
| 6 | 2016 | ingressantes | 163485 |
| 7 | 2017 | ingressantes | 158239 |
| 8 | 2018 | ingressantes | 147192 |
| 9 | 2019 | ingressantes | 153755 |
| 10 | 2010 | concluintes | 44043 |
| 11 | 2011 | concluintes | 49723 |
| 12 | 2012 | concluintes | 57057 |
| 13 | 2013 | concluintes | 57947 |
| 14 | 2014 | concluintes | 57994 |
| 15 | 2015 | concluintes | 58216 |
| 16 | 2016 | concluintes | 59397 |
| 17 | 2017 | concluintes | 58377 |
| 18 | 2018 | concluintes | 55737 |
| 19 | 2019 | concluintes | 56185 |
| 20 | 2010 | ingressantes_fem | 31650 |
| 21 | 2011 | ingressantes_fem | 36712 |
| 22 | 2012 | ingressantes_fem | 43211 |
| 23 | 2013 | ingressantes_fem | 45463 |
| 24 | 2014 | ingressantes_fem | 46855 |
| 25 | 2015 | ingressantes_fem | 42820 |
| 26 | 2016 | ingressantes_fem | 40108 |
| 27 | 2017 | ingressantes_fem | 38112 |
| 28 | 2018 | ingressantes_fem | 35387 |
| 29 | 2019 | ingressantes_fem | 37935 |
| 30 | 2010 | concluintes_fem | 12286 |
| 31 | 2011 | concluintes_fem | 13956 |
| 32 | 2012 | concluintes_fem | 16219 |
| 33 | 2013 | concluintes_fem | 16867 |
| 34 | 2014 | concluintes_fem | 16736 |
| 35 | 2015 | concluintes_fem | 16640 |
| 36 | 2016 | concluintes_fem | 16291 |
| 37 | 2017 | concluintes_fem | 15930 |
| 38 | 2018 | concluintes_fem | 14413 |
| 39 | 2019 | concluintes_fem | 14809 |
lineplot
px.line(dfg, x='ano', y='value', line_dash='variable', range_y=[0, None])Por Região
var = 'regiao'
dfg = get_grouped(df, var)
dfg| ano | regiao | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | Centro-Oeste | ingressantes | 9865 |
| 1 | 2010 | Nordeste | ingressantes | 13979 |
| 2 | 2010 | Norte | ingressantes | 6579 |
| 3 | 2010 | Sudeste | ingressantes | 71278 |
| 4 | 2010 | Sul | ingressantes | 17126 |
| ... | ... | ... | ... | ... |
| 195 | 2019 | Centro-Oeste | concluintes_fem | 1056 |
| 196 | 2019 | Nordeste | concluintes_fem | 2121 |
| 197 | 2019 | Norte | concluintes_fem | 890 |
| 198 | 2019 | Sudeste | concluintes_fem | 8286 |
| 199 | 2019 | Sul | concluintes_fem | 2456 |
200 rows × 4 columns
lineplot
px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])barplot
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])scatterplot
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='regiao', opacity=.75, size='concluintes_fem')Por Unidade Federativa
var = 'uf'
dfg = get_grouped(df, var)
dfg| ano | uf | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | AC | ingressantes | 514 |
| 1 | 2010 | AL | ingressantes | 924 |
| 2 | 2010 | AM | ingressantes | 2405 |
| 3 | 2010 | AP | ingressantes | 202 |
| 4 | 2010 | BA | ingressantes | 3287 |
| ... | ... | ... | ... | ... |
| 1075 | 2019 | RS | concluintes_fem | 1010 |
| 1076 | 2019 | SC | concluintes_fem | 512 |
| 1077 | 2019 | SE | concluintes_fem | 90 |
| 1078 | 2019 | SP | concluintes_fem | 4957 |
| 1079 | 2019 | TO | concluintes_fem | 65 |
1080 rows × 4 columns
lineplot
px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])barplot
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])scatterplot
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='uf', opacity=.75, size='concluintes_fem') #, animation_frame='ano')Por se é Capital
var = 'capital'
dfg = get_grouped(df, var)
dfg| ano | capital | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 55133 |
| 1 | 2010 | True | ingressantes | 63694 |
| 2 | 2011 | False | ingressantes | 62350 |
| 3 | 2011 | True | ingressantes | 73429 |
| 4 | 2012 | False | ingressantes | 77846 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 7746 |
| 76 | 2018 | False | concluintes_fem | 7492 |
| 77 | 2018 | True | concluintes_fem | 6921 |
| 78 | 2019 | False | concluintes_fem | 7677 |
| 79 | 2019 | True | concluintes_fem | 7132 |
80 rows × 4 columns
lineplot
px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])barplot
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])scatterplot
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='capital', opacity=.75, size='concluintes_fem')Por Area STEM
var = 'cod_area'
dfg = get_grouped(df, var)
dfg| ano | cod_area | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | 51 | ingressantes | 7009 |
| 1 | 2010 | 53 | ingressantes | 6892 |
| 2 | 2010 | 54 | ingressantes | 1660 |
| 3 | 2010 | 61 | ingressantes | 54624 |
| 4 | 2010 | 71 | ingressantes | 48642 |
| ... | ... | ... | ... | ... |
| 195 | 2019 | 51 | concluintes_fem | 2893 |
| 196 | 2019 | 53 | concluintes_fem | 1448 |
| 197 | 2019 | 54 | concluintes_fem | 320 |
| 198 | 2019 | 61 | concluintes_fem | 3858 |
| 199 | 2019 | 71 | concluintes_fem | 6290 |
200 rows × 4 columns
lineplot
px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])cod_areas = {
51: 'Ciên. Biológicas',
53: 'Ciên. Físicas',
54: 'Matemática & Estatística',
61: 'Computação',
71: 'Engenharia',
}barplot
dfg[var] = dfg[var].map(cod_areas)
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])scatterplot
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='area', opacity=.75, size='concluintes_fem', range_x=[0,1], range_y=[0,1])Por se é Rede Pública
var = 'rede_publica'
dfg = get_grouped(df, var)
dfg| ano | rede_publica | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 82799 |
| 1 | 2010 | True | ingressantes | 36028 |
| 2 | 2011 | False | ingressantes | 92579 |
| 3 | 2011 | True | ingressantes | 43200 |
| 4 | 2012 | False | ingressantes | 113823 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 8203 |
| 76 | 2018 | False | concluintes_fem | 6209 |
| 77 | 2018 | True | concluintes_fem | 8204 |
| 78 | 2019 | False | concluintes_fem | 5982 |
| 79 | 2019 | True | concluintes_fem | 8827 |
80 rows × 4 columns
lineplot
px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])barplot
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])scatterplot
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='rede_publica', opacity=.75, size='concluintes_fem')Por se é Presencial
var = 'presencial'
dfg = get_grouped(df, var)
dfg| ano | presencial | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 8099 |
| 1 | 2010 | True | ingressantes | 110728 |
| 2 | 2011 | False | ingressantes | 9181 |
| 3 | 2011 | True | ingressantes | 126598 |
| 4 | 2012 | False | ingressantes | 13438 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 14653 |
| 76 | 2018 | False | concluintes_fem | 1126 |
| 77 | 2018 | True | concluintes_fem | 13287 |
| 78 | 2019 | False | concluintes_fem | 1216 |
| 79 | 2019 | True | concluintes_fem | 13593 |
80 rows × 4 columns
lineplot
px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])barplot
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])scatterplot
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='presencial', opacity=.75, size='concluintes_fem')Por se é Bacharelado
var = 'bacharel'
dfg = get_grouped(df, var)
dfg| ano | bacharel | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 44212 |
| 1 | 2010 | True | ingressantes | 74615 |
| 2 | 2011 | False | ingressantes | 51459 |
| 3 | 2011 | True | ingressantes | 84320 |
| 4 | 2012 | False | ingressantes | 58819 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 11779 |
| 76 | 2018 | False | concluintes_fem | 3868 |
| 77 | 2018 | True | concluintes_fem | 10545 |
| 78 | 2019 | False | concluintes_fem | 3855 |
| 79 | 2019 | True | concluintes_fem | 10954 |
80 rows × 4 columns
lineplot
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')barplot
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])scatterplot
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='bacharel', opacity=.75, size='concluintes_fem')